13490
11314
Zavřeno. Tato otázka vyžaduje podrobnosti nebo jasnost. Momentálně nepřijímá odpovědi.
Chcete tuto otázku vylepšit? Přidejte podrobnosti a objasněte problém úpravou tohoto příspěvku.
Uzavřeno před 1 rokem.
Vylepšete tuto otázku
Dělám nějakou výzvu kódu a chci získat první 3 hodnoty z mého pole zadáním počátečního indexu a získáním pouze prvních (3 nebo může mít libovolnou délku) hodnot z počátečního indexu.
Zkoušel jsem tento kód a funguje to, ale struktura kódu je příliš dlouhá, takže jak to mohu zkrátit, aby to bylo snadné pochopit.
int n = 10;
dvojitý podpis = nový dvojitý [] {1, 1, 1};
double [] ret = nový double [n];
dvojnásobný součet = 0;
ret [0] = podpis [0];
ret [1] = podpis [1];
ret [2] = podpis [2];
int x, i;
for (i = 0; i 
                                
Pomocí LINQ můžete zkusit něco takového:
hodnoty var = pole.Skip (index)
.Take (n)
.ToArray ();
Kde index je index první položky an počet položek, které chcete vybrat.
Např. https://dotnetfiddle.net/Pk1rwY
Jako vedlejší poznámku. Použití LINQ neznamená, že by váš kód byl rychlejší. Bylo by to kompaktnější / čitelnější atd. Abyste mohli posoudit, jak výkonný je váš kód, musíte použít něco jako BenchmarkDotNet.
|
Žádné řešení Linq:
soukromý statický T [] extrakt  (zdroj T [], int fromIndex, délka int) {
if (null == zdroj)
hodit novou ArgumentNullException (nameof (source));
else if (fromIndex <0)
hodit novou ArgumentOutOfRangeException (nameof (fromIndex),
„Z indexu musí být nezáporné“);
jinak if (délka <0)
hodit novou ArgumentOutOfRangeException (nameof (length),
„Délka musí být nezáporná“);
if (fromIndex> = source.Length || length == 0)
vrátit nové T [0];
T [] result = new T [Math.Min (length, source.Length - fromIndex)];
Array.Copy (source, fromIndex, result, 0, result.Length);
vrátit výsledek;
}
Pak
double [] podpis = nový double [] {0, 1, 2, 3, 4, 5};
double [] ret = Výpis (podpis, 3, 2);
Console.Write (string.Join (",", ret));
Výsledek:
3, 4
|
Z vaší otázky musíte využít operátory .Take a .Skip.
var result = array.Skip (startingIndex) .Take (numberOfElements);
Z vašeho kódu se tedy zdá, že se snažíte udělat něco trochu jiného, ​​a to sčítání prvků. Zde může pomoci operátor .Sum.
|
Toto není odpověď, kterou hledáte? Přečtěte si další otázky týkající se značek c # arrays linq nebo položte vlastní otázku.